package top.whysu.edevice.service.ezviz;

import top.whysu.edevice.dto.device.DeviceAddModifyDTO;
import top.whysu.edevice.po.manage.ManageDevicePO;

import java.math.BigDecimal;

/**
 * 萤石
 */
public interface EzvizService {

    /**
     * 在萤石新增子账号
     *
     * @param accountId 账号id, 对应e_system_account的id
     * @param voucherId 凭证组id, 对应e_manage_voucher的id
     */
    void createChildAccount(BigDecimal accountId, BigDecimal voucherId);

    /**
     * 在萤石删除子账号
     *
     * @param accountId 账号id, 对应e_system_account的id
     * @param voucherId 凭证组id, 对应e_manage_voucher的id
     */
    void deleteChildAccount(BigDecimal accountId, BigDecimal voucherId);

    /**
     * 在萤石上新增设备
     *
     * @param voucherId          凭证组id, 对应e_manage_voucher的id
     * @param deviceAddModifyDTO 设备修改/新增请求对象
     */
    void createDevice(BigDecimal voucherId, DeviceAddModifyDTO deviceAddModifyDTO);

    /**
     * 在萤石删除设备
     *
     * @param manageDevicePO 设备信息
     */
    void deleteDevice(ManageDevicePO manageDevicePO);

    /**
     * 在账号关联凭证组以后，更新这个子账号对应的授权策略
     *
     * @param voucherId 凭证组id, 对应e_manage_voucher的id
     */
    void setPolicyAfterAssignAccount(BigDecimal accountId, BigDecimal voucherId);

    /**
     * 添加设备成功后，查询凭证组下的所有账号，将这台设备添加到这些账号下
     *
     * @param voucherId 凭证组id
     * @param deviceId  设备ID
     */
    void addDeviceToAccountByVoucher(BigDecimal voucherId, BigDecimal deviceId);

}
